package com.crazyhat.crazyhat.pojo;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import org.springframework.web.multipart.MultipartFile;

import com.crazyhat.crazyhat.tasks.ImageScanTask;
import com.crazyhat.crazyhat.utils.ObsUtil;
import com.fasterxml.jackson.databind.ObjectMapper;

import jakarta.validation.constraints.NotEmpty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 多文件上传JSON内容实体
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ContentWithFile {

    /**
     * 上传文件的父目录名
     * 例如：img/
     */
    //@Value("${my-config.aliyun-OSS-config.imageDirectory}")
    private final String imageDirectory="img/";

    /**
     * 内容
     */
    @NotEmpty
    private String content;

    /**
     * 文件列表
     */
    private List<MultipartFile> fileList;
    
    /*
     * 处理文件，并转换为JSON
     */
    public String processAndConvertToJson() {

        JsonContent jsonContent=new JsonContent();
        jsonContent.setContent(content);

        try{

            if(fileList!=null) {

                List<String> fileUrlList=new ArrayList<>();
    
                String originalFileName;
    
                //将文件存储三方服务器
                for(MultipartFile file:fileList){
    
                    originalFileName=file.getOriginalFilename();
    
                    if (originalFileName==null||originalFileName.isEmpty()) {
                        continue;
                    }
    
                    /**
                     * 文件名替换为uuid，并添加父目录名
                     */
                    String savedfileName = imageDirectory+UUID.randomUUID().toString()
                            + originalFileName.substring(originalFileName.lastIndexOf("."));
    
                    fileUrlList.add(ObsUtil.uploadFile(savedfileName, file.getInputStream()));
                }

                //添加图片定时扫描任务源数据
                ImageScanTask.addUrl(fileUrlList);

                jsonContent.setFileUrlList(fileUrlList);
            }

            ObjectMapper mapper = new ObjectMapper();  

            // 将对象转换为JSON字符串  
            String jsonString = mapper.writeValueAsString(jsonContent);

            return jsonString;

        } catch(IOException e) {

            e.printStackTrace();
        } 

        return  null;
    }
}
